using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data.SqlClient;
using System.Data;

namespace TestImport.Bestellingen
{
    class BestellingEenLeerling
    {
        private int vleerlingID;
        private int vboeklijstID;
        private DateTime datum;

        private string conString = "";
        private SqlConnection conn = null;
        private string cmd = "";
        private SqlCommand cm = null;

        public BestellingEenLeerling()
        {
            conString = Properties.Settings.Default.TestImportConnectionString;
            conn = new SqlConnection(conString);
        }

        public BestellingEenLeerling(int ID, int vboeklijstID, DateTime datum)
        {
            vleerlingID = ID;
            this.vboeklijstID = vboeklijstID;
            this.datum = datum;

            conString = Properties.Settings.Default.TestImportConnectionString;
            conn = new SqlConnection(conString);
        }

        public void verwerkBestelling(int boekID, int vboeklijstItemID, bool bestellen)
        {
            //boek bestellen
            if (bestellen)
            {
                if (!DBzoekLeerlingBoek(boekID))
                {
                    DBvoegBestellingToe(boekID, datum, vboeklijstItemID, (int)Bestelling.LLBoekStatus.BesteldLL);
                }

            }
        }

        
        public int wisBestellingenVoorLeerling()
        {
            int vStatus = (int)Bestelling.LLBoekStatus.BesteldLL;
            int aantal = 0;
            cmd = "DELETE FROM LeerlingBoek " +
                  "WHERE leerlingID = @leerlingID AND status = @status";
            cm = new SqlCommand(cmd, conn);
            cm.Parameters.Add("@leerlingID", SqlDbType.Int);
            cm.Parameters.Add("@status", SqlDbType.Int);
            cm.Parameters["@leerlingID"].Value = vleerlingID;
            cm.Parameters["@status"].Value = vStatus;
            conn.Open();
            aantal = cm.ExecuteNonQuery();
            conn.Close();
            return aantal;
        }

        public int wisBestellingenVoorLeerling(int vleerlingBoekID)
        {
            int vStatus = (int)Bestelling.LLBoekStatus.BesteldLL;
            int aantal = 0;
            cmd = "DELETE FROM LeerlingBoek " +
                  "WHERE leerlingBoekID = @leerlingBoekID AND status = @status";
            cm = new SqlCommand(cmd, conn);
            cm.Parameters.Add("@leerlingBoekID", SqlDbType.Int);
            cm.Parameters.Add("@status", SqlDbType.Int);
            cm.Parameters["@leerlingBoekID"].Value = vleerlingBoekID;
            cm.Parameters["@status"].Value = vStatus;
            conn.Open();
            aantal = cm.ExecuteNonQuery();
            conn.Close();
            return aantal;
        }

        public int getStatusBestelling(int vleerlingBoekID)
        {
            int terug = -1;
            cmd = "SELECT status FROM LeerlingBoek WHERE leerlingBoekID = @leerlingBoekID";
            cm = new SqlCommand(cmd, conn);
            cm.Parameters.Add("@leerlingBoekID", SqlDbType.Int);
            cm.Parameters["@leerlingBoekID"].Value = vleerlingBoekID;

            conn.Open();
            SqlDataReader d = cm.ExecuteReader();
            if (d.HasRows)
            {
                d.Read();
                terug = int.Parse(d["status"].ToString());
            }
            d.Close();
            conn.Close();
            return terug;
        }    


        public bool DBzoekLeerlingBoek(int vboekID)
        {
            bool terug = false;
            cmd = "SELECT leerlingBoekID FROM LeerlingBoek WHERE leerlingID = @leerlingID AND boekID = @boekID";
            cm = new SqlCommand(cmd, conn);
            cm.Parameters.Add("@leerlingID", SqlDbType.Int);
            cm.Parameters.Add("@boekID", SqlDbType.Int);
            cm.Parameters["@leerlingID"].Value = vleerlingID;
            cm.Parameters["@boekID"].Value = vboekID;
            conn.Open();
            SqlDataReader d = cm.ExecuteReader();
            terug = d.HasRows;
            d.Close();
            conn.Close();
            return terug;
        }

        public bool DBzoekLeerlingBoekBis(int vleerlingBoekID)
        {
            bool terug = false;
            cmd = "SELECT leerlingBoekID FROM LeerlingBoek WHERE leerlingBoekID = @leerlingBoekID";
            cm = new SqlCommand(cmd, conn);
            cm.Parameters.Add("@leerlingBoekID", SqlDbType.Int);
            
            cm.Parameters["@leerlingBoekID"].Value = vleerlingBoekID;
            
            conn.Open();
            SqlDataReader d = cm.ExecuteReader();
            terug = d.HasRows;
            d.Close();
            conn.Close();
            return terug;
        }

        public bool DBvoegBestellingToe(int vboekID, DateTime vDatum,int vboeklijstItemID, int vStatus)
        {
            int aantal = 0;
            cmd = "INSERT INTO LeerlingBoek " +
                  "(boekID, leerlingID,datumBestelling, boeklijstItemID, status) " +
                  "VALUES (@boekID, @leerlingID, @datum, @boeklijstItemID, @status)";
            cm = new SqlCommand(cmd, conn);
            cm.Parameters.Add("@leerlingID", SqlDbType.Int);
            cm.Parameters.Add("@boekID", SqlDbType.Int);
            cm.Parameters.Add("@datum", SqlDbType.DateTime);
            cm.Parameters.Add("@boeklijstItemID", SqlDbType.Int);
            cm.Parameters.Add("@status", SqlDbType.Int);
            cm.Parameters["@leerlingID"].Value = vleerlingID;
            cm.Parameters["@boekID"].Value = vboekID;
            cm.Parameters["@datum"].Value = vDatum;
            cm.Parameters["@boeklijstItemID"].Value = vboeklijstItemID;
            cm.Parameters["@status"].Value = vStatus;
            conn.Open();
            aantal = cm.ExecuteNonQuery();
            conn.Close();
            return aantal==1;
        }

        public bool voegAfhalingToe(int vboekID, DateTime vDatum, int vStatus)
        {
            return false;
        }

        public string getBesteldeBoeken()
        {
            string terug = "";
            cmd = "SELECT DISTINCT b.titel, bl.categorieCode, bl.boeksoortCode "+
                  "FROM (LeerlingBoek AS lb INNER JOIN Boek AS b ON lb.boekID = b.BoekID) "+
                  "INNER JOIN BoeklijstItem AS bl ON bl.boeklijstItemID = lb.boeklijstItemID "+
                  "WHERE lb.leerlingID = @leerlingID " +
                  "ORDER BY bl.categorieCode";
            cm = new SqlCommand(cmd, conn);
            cm.Parameters.Add("@leerlingID", SqlDbType.Int);
           // cm.Parameters.Add("@boeklijstID", SqlDbType.Int);
            cm.Parameters["@leerlingID"].Value = vleerlingID;
           // cm.Parameters["@boeklijstID"].Value = vboeklijstID;
            conn.Open();
            SqlDataReader reader = cm.ExecuteReader();
            //terug = d.HasRows;
            
            while (reader.Read() )
            {
                
                terug += reader["categorieCode"].ToString().PadRight(8,'.')+reader["titel"].ToString()+"("+
                        reader["boeksoortCode"].ToString()+")"+ "\r\n";
                //terug += reader["titel"].ToString()+ "\r\n";
            }
            reader.Close();
           
            conn.Close();
            return terug;
        }
                     

    }
}
